System, method and program product for cost-aware selection of stored virtual machine images for subsequent use

ABSTRACT

A system, method and computer program product for allocating shared resources. Upon receiving requests for resources, the cost of bundling software in a virtual machine (VM) image is automatically generated. Software is selected by the cost for each bundle according to the time required to install it where required, offset by the time to uninstall it where not required. A number of VM images having the highest software bundle value (i.e., highest cost bundled) is selected and stored, e.g., in a machine image store. With subsequent requests for resources, VMs may be instantiated from one or more stored VM images and, further, stored images may be updated selectively updated with new images.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention is related to allocating shared resources and more particularly to selecting an optimal set of virtual machine images for satisfying resource requests and instantiating virtual machines with minimal overhead and minimum wasted resources.

2. Background Description

Acquiring, managing and maintaining Information Technology (IT) is a major budgetary concern for any modern organization. Moreover, local physical hardware, e.g., mainframe servers, is seldom used at full capacity. To reduce IT infrastructure costs and waste, instead of acquiring physical hardware, organizations are increasingly consolidating workload on shared hardware, using virtual machines (VMs) hosted on provider servers or computers. Ideally, each VM appears as an independent computer (e.g., a virtual processor, memory and disk space) running, for example, an operating system (OS) and a software stack with one or more active software elements (e.g., applications or other software).

As with any stand-alone computer, it takes some measurable time to set up each VM from scratch. For example, provisioning a VM may involve allocating shared hardware for the VM and then, opening the OS and installing the software stack on the VM. So for efficiency, rather than spending time setting each VM up from scratch, providers are capturing the state of the allocated virtual hardware and configured software in a file representation or virtual machine image. The VM images are subsequently reused for an identical or substantially similar VM, merely by loading the image to arrive at the same state.

So, a minimum VM image is a file representation of a configured virtual machine and/or the virtual machine device(s). A VM image may further include all installed software components, i.e., the OS and software stack. Normally, each image is packaged with metadata describing corresponding hardware and software requirements in a virtual resource template (VRT or template). Each template includes at least one, and can include more than one, image. Providers can more efficiently provision virtual machines from a selection of available images. One or more virtualizer server loads the VM image(s) from a respective template to instantiate and run the respective virtual machine(s). Then, the server customizes the loaded image(s) for specific request requirements.

While using images to provision and instantiate VMs may save time over configuring the same VMs from scratch, maintaining these rather large image files consumes storage space, sufficient space, for example, to reproduce the memory, slack, disk and cache contents dedicated to the respective VM. So, rather than create a VM image for every potential configuration, cloud providers try to guess which VM images to keep to satisfy the most requests.

Prior approaches to selecting VM images have focused primarily on reducing software deployment/configuration time. One approach evaluates virtual machine image similarity to select images that reduce the data volume transferred from storage to the hypervisor on which VMs are instantiated, without regard to the time required to instantiate the VMs. Another approach derives VM templates that match the majority of the user requests in a Cloud infrastructure, again without regard to the time required to instantiate the VMs or the volume of data involved in the images.

Thus, there is a need for identifying an optimal number of VM images, and more particularly, there is a need for identifying an optimal set of VM images with the bundled software for subsequent reuse that make the best use of system resources.

SUMMARY OF THE INVENTION

A feature of the invention is reduced overhead in provisioning virtual machines from a set of virtual machine (VM) images;

Another feature of the invention is automatic selection of an optimal set of VM images with the bundled software;

Yet another feature of the invention is automatic selection of an optimal set of VM images with the bundled software for reducing overhead in provisioning virtual machines from the set of VM images.

The present invention relates to a system, method and computer program product for allocating shared resources. Upon receiving requests for resources, the cost of bundling software in a virtual machine (VM) image is automatically generated. Software is selected by the cost for each bundle according to the time required to install it where required, offset by the time to uninstall it where not required. A number of VM images having the highest software bundle value (i.e., highest cost bundled) is selected and stored, e.g., in a machine image store. With subsequent requests for resources, VMs may be instantiated from one or more stored VM images and, further, stored images may be updated selectively updated with new images.

Embodiments of the invention include:

A shared resource system comprising: a plurality of client devices selectively requesting resources; a virtual machine (VM) allocation system automatically costing images for received requests, said VM allocation system selecting a number of VM images with bundled software; a machine image store storing VM images, said VM allocation system storing selected said VM images with bundled software in said machine image store; and one or more provider computers selectively instantiating a VM from one or more stored VM images responsive to requests for resource from said plurality of client devices.

In this embodiment the shared resource system may comprise a network coupling said plurality of client devices to said one or more provider computers and said machine image store. The machine image store may further store software being selectively bundled on said VM images with bundled software. The machine image store may further selectively store VM images without software and said stored software comprise one or more operating systems and computer applications.

The VM allocation system may comprise: means for receiving said requests for resources; means for provisioning a VM responsive to each request; means for installing software on a provisioned VM; means for uninstalling software from said provisioned VM; means for costing installation and uninstallation of said software; and means for identifying a set of images with software bundles having a maximum cost responsive to said means for costing. Each request for resources may include a requested virtual hardware configuration and a software stack, and said software bundles include an operating system and one or more software elements identified in said software stack. The means for costing may determine a cost for each software element and each software bundle includes a number of software elements having a maximum cost for said software stack. For each software element (i), said means for costing may assign a software utility (SU_(i)) based on the number of requests that require (ri) and the number of requests that do not require (nri) said each software element, said each software element has installation time (instTime(i)) and removal time (remTime(i)) costs. The means for costing may determine said software utility according to SU_(i)=ri*instTime(i)−nri*remTime(i).

The machine image store may further store previously received requests and VM images without software, with said VM allocation system automatically costing and selecting an initial set of said VM images with bundled software responsive to said previously received requests. Further the provider computers may be cloud computers in a cloud environment.

In another embodiment, the shared resource system comprises: a plurality of client devices selectively requesting resources; a VM allocation system initially automatically costing virtual machine (VM) images with bundled software responsive to said received requests, said VM allocation system selecting a number of VM images with bundled software; and a machine image store storing software and said number of VM images; and one or more provider computers selectively instantiating a VM from one or more stored VM images responsive to requests; a network coupling said plurality of client devices to said one or more provider computers and said machine image store.

The one or more provider computers may be cloud computers in a cloud environment sharing cloud resources; wherein said VM allocation system automatically costs VM images for stored previously received requests and selects an initial set of said VM images including VM images without software and VM images with bundled software; and said machine image store stores said initial set.

The stored software may comprise one or more operating systems and computer applications and said VM allocation system may comprise: means for receiving said requests for resources; means for provisioning a VM responsive to each request; means for installing software on said provisioned VM; means for uninstalling software from said provisioned VM; means for costing installation and uninstallation of said software; and means for identifying a set of images with software bundles having a maximum cost responsive to said means for costing.

Each request may include a requested virtual hardware configuration and a software stack, said software bundles may include an operating system and one or more software elements identified in said software stack, said means for costing may determine a cost for each software element, and each software bundle may include a maximum number of software elements having the highest cost for said software stack, thereby realizing the highest advantage of including those software elements in the bundle.

Each software element (i) said means for costing assigns a software utility (SU_(i)) based on the number of requests that require (ri) and the number of requests that do not require (nri) said each software element, said each software element having installation time (instTime(i)) and removal time (remTime(i)) costs, said means for costing determining said software utility according to SU_(i)=ri*instTime(i)−nri*remTime(i).

In another embodiment, a computer program product for allocating cloud resources, said computer program product comprising a computer usable medium having computer readable program code stored thereon, said computer readable program code comprising: computer readable program code means for receiving requests for resources from client devices; computer readable program code means for provisioning requested resources in a virtual machine (VM) on one or more cloud computers responsive to each received request; computer readable program code means for costing each said VM; computer readable program code means for selecting a number of VMs as image files for reuse; and computer readable program code means for storing selected VM images, VMs being selectively instantiated from one or more stored VM images responsive to subsequent requests for resources.

In yet another embodiment, a computer program product for allocating cloud resources, said computer program product comprising a computer usable medium having computer readable program code stored thereon, said computer readable program code comprising: computer readable program code means for receiving requests for cloud resources from client devices, each request for cloud resources including a requested virtual hardware configuration and a software stack; computer readable program code means for costing virtual machine (VM) images with bundled software responsive to said received requests, said bundled software including an operating system and one or more software elements identified in said software stack; computer readable program code means for selecting a number of VM images; computer readable program code means for storing software and said number of VM images; and computer readable program code means for selectively instantiating a VM from one or more stored said VM images responsive to requests for resources.

BRIEF DESCRIPTION OF THE DRAWINGS

The foregoing and other objects, aspects and advantages will be better understood from the following detailed description of a preferred embodiment of the invention with reference to the drawings, in which:

FIG. 1 depicts a cloud computing node according to an embodiment of the present invention;

FIG. 2 depicts a cloud computing environment according to an embodiment of the present invention;

FIG. 3 depicts abstraction model layers according to an embodiment of the present invention;

FIG. 4 shows an example of determining optimal software system bundles in canned images for pre-imaging virtual machines according to a preferred embodiment of the present invention;

FIG. 5 shows an example of pseudo-code for selecting and creating the VM image bundles.

DESCRIPTION OF PREFERRED EMBODIMENTS

It is understood in advance that although this disclosure includes a detailed description on cloud computing, implementation of the teachings recited herein are not limited to a cloud computing environment. Rather, embodiments of the present invention are capable of being implemented in conjunction with any other type of computing environment now known or later developed and as further indicated hereinbelow.

Cloud computing is a model of service delivery for enabling convenient, on-demand network access to a shared pool of configurable computing resources (e.g. networks, network bandwidth, servers, processing, memory, storage, applications, virtual machines, and services) that can be rapidly provisioned and released with minimal management effort or interaction with a provider of the service. This cloud model may include at least five characteristics, at least three service models, and at least four deployment models.

Characteristics are as follows:

On-demand self-service: a cloud consumer can unilaterally provision computing capabilities, such as server time and network storage, as needed automatically without requiring human interaction with the service's provider.

Broad network access: capabilities are available over a network and accessed through standard mechanisms that promote use by heterogeneous thin or thick client platforms (e.g., mobile phones, laptops, and PDAs).

Resource pooling: the provider's computing resources are pooled to serve multiple consumers using a multi-tenant model, with different physical and virtual resources dynamically assigned and reassigned according to demand. There is a sense of location independence in that the consumer generally has no control or knowledge over the exact location of the provided resources but may be able to specify location at a higher level of abstraction (e.g., country, state, or datacenter).

Rapid elasticity: capabilities can be rapidly and elastically provisioned, in some cases automatically, to quickly scale out and rapidly released to quickly scale in. To the consumer, the capabilities available for provisioning often appear to be unlimited and can be purchased in any quantity at any time.

Measured service: cloud systems automatically control and optimize resource use by leveraging a metering capability at some level of abstraction appropriate to the type of service (e.g., storage, processing, bandwidth, and active user accounts). Resource usage can be monitored, controlled, and reported providing transparency for both the provider and consumer of the utilized service. Moreover, the present invention provides for client self-monitoring for adjusting individual resource allocation and configuration on-the-fly for optimized resource allocation in real time and with operating costs and energy use minimized.

Service Models are as follows:

Software as a Service (SaaS): the capability provided to the consumer is to use the provider's applications running on a cloud infrastructure. The applications are accessible from various client devices through a thin client interface such as a web browser (e.g., web-based e-mail). The consumer does not manage or control the underlying cloud infrastructure including network, servers, operating systems, storage, or even individual application capabilities, with the possible exception of limited user-specific application configuration settings.

Platform as a Service (PaaS): the capability provided to the consumer is to deploy onto the cloud infrastructure consumer-created or acquired applications created using programming languages and tools supported by the provider. The consumer does not manage or control the underlying cloud infrastructure including networks, servers, operating systems, or storage, but has control over the deployed applications and possibly application hosting environment configurations.

Infrastructure as a Service (IaaS): the capability provided to the consumer is to provision processing, storage, networks, and other fundamental computing resources, sometimes referred to as a hypervisor, where the consumer is able to deploy and run arbitrary software, which can include operating systems and applications. The consumer does not manage or control the underlying cloud infrastructure but has control over operating systems, storage, deployed applications, and possibly limited control of select networking components (e.g., host firewalls).

Deployment Models are as follows:

Private cloud: the cloud infrastructure is operated solely for an organization. It may be managed by the organization or a third party and may exist on-premises or off-premises.

Community cloud: the cloud infrastructure is shared by several organizations and supports a specific community that has shared concerns (e.g., mission, security requirements, policy, and compliance considerations). It may be managed by the organizations or a third party and may exist on-premises or off-premises.

Public cloud: the cloud infrastructure is made available to the general public or a large industry group and is owned by an organization selling cloud services.

Hybrid cloud: the cloud infrastructure is a composition of two or more clouds (private, community, or public) that remain unique entities but are bound together by standardized or proprietary technology that enables data and application portability (e.g., cloud bursting for load-balancing between clouds).

A cloud computing environment is service oriented with a focus on statelessness, low coupling, modularity, and semantic interoperability. At the heart of cloud computing is an infrastructure comprising a network of interconnected nodes.

Referring now to FIG. 1, a schematic of an example of a cloud computing node is shown. Cloud computing node 10 is only one example of a suitable cloud computing node and is not intended to suggest any limitation as to the scope of use or functionality of embodiments of the invention described herein. Regardless, cloud computing node 10 is capable of being implemented and/or performing any of the functionality set forth hereinabove.

In cloud computing node 10 there is a computer system/server 12, which is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and/or configurations that may be suitable for use with computer system/server 12 include, but are not limited to, personal computer systems, server computer systems, thin clients, thick clients, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputer systems, mainframe computer systems, and distributed cloud computing environments that include any of the above systems or devices, and the like.

Computer system/server 12 may be described in the general context of computer system-executable instructions, such as program modules, being executed by a computer system. Generally, program modules may include routines, programs, objects, components, logic, data structures, and so on that perform particular tasks or implement particular abstract data types. Computer system/server 12 may be practiced in distributed cloud computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed cloud computing environment, program modules may be located in both local and remote computer system storage media including memory storage devices.

As shown in FIG. 1, computer system/server 12 in cloud computing node 10 is shown in the form of a general-purpose computing device. The components of computer system/server 12 may include, but are not limited to, one or more processors or processing units 16, a system memory 28, and a bus 18 that couples various system components including system memory 28 to processor 16.

Bus 18 represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. By way of example, and not limitation, such architectures include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnects (PCI) bus.

Computer system/server 12 typically includes a variety of computer system readable media. Such media may be any available media that is accessible by computer system/server 12, and it includes both volatile and non-volatile media, removable and non-removable media.

System memory 28 can include computer system readable media in the form of volatile memory, such as random access memory (RAM) 30 and/or cache memory 32. Computer system/server 12 may further include other removable/non-removable, volatile/non-volatile computer system storage media. By way of example only, storage system 34 can be provided for reading from and writing to a non-removable, non-volatile magnetic media (not shown and typically called a “hard drive”). Although not shown, a magnetic disk drive for reading from and writing to a removable, non-volatile magnetic disk (e.g., a “floppy disk”), and an optical disk drive for reading from or writing to a removable, non-volatile optical disk such as a CD-ROM, DVD-ROM or other optical media can be provided. In such instances, each can be connected to bus 18 by one or more data media interfaces. As will be further depicted and described below, memory 28 may include at least one program product having a set (e.g., at least one) of program modules that are configured to carry out the functions of embodiments of the invention.

Program/utility 40, having a set (at least one) of program modules 42, may be stored in memory 28 by way of example, and not limitation, as well as an operating system, one or more application programs, other program modules, and program data. Each of the operating system, one or more application programs, other program modules, and program data or some combination thereof, may include an implementation of a networking environment. Program modules 42 generally carry out the functions and/or methodologies of embodiments of the invention as described herein.

Computer system/server 12 may also communicate with one or more external devices 14 such as a keyboard, a pointing device, a display 24, etc.; one or more devices that enable a user to interact with computer system/server 12; and/or any devices (e.g., network card, modem, etc.) that enable computer system/server 12 to communicate with one or more other computing devices. Such communication can occur via Input/Output (I/O) interfaces 22. Still yet, computer system/server 12 can communicate with one or more networks such as a local area network (LAN), a general wide area network (WAN), and/or a public network (e.g., the Internet) via network adapter 20. As depicted, network adapter 20 communicates with the other components of computer system/server 12 via bus 18. It should be understood that although not shown, other hardware and/or software components could be used in conjunction with computer system/server 12. Examples, include, but are not limited to: microcode, device drivers, redundant processing units, external disk drive arrays, RAID systems, tape drives, and data archival storage systems, etc.

Referring now to FIG. 2, illustrative cloud computing environment 50 is depicted. As shown, cloud computing environment 50 comprises one or more cloud computing nodes 10 with which local computing devices used by cloud consumers, such as, for example, personal digital assistant (PDA) or cellular telephone 54A, desktop computer 54B, laptop computer 54C, and/or automobile computer system 54N may communicate. Nodes 10 may communicate with one another. They may be grouped (not shown) physically or virtually, in one or more networks, such as Private, Community, Public, or Hybrid clouds as described hereinabove, or a combination thereof. This allows cloud computing environment 50 to offer infrastructure, platforms and/or software as services for which a cloud consumer does not need to maintain resources on a local computing device. It is understood that the types of computing devices 54A-N shown in FIG. 2 are intended to be illustrative only and that computing nodes 10 and cloud computing environment 50 can communicate with any type of computerized device over any type of network and/or network addressable connection (e.g., using a web browser).

Referring now to FIG. 3, a set of functional abstraction layers provided by cloud computing environment 50 (FIG. 2) is shown. It should be understood in advance that the components, layers, and functions shown in FIG. 3 are intended to be illustrative only and embodiments of the invention are not limited thereto. As depicted in this example, a hardware and software layer 60, a virtualization layer 62, a management layer 64, workloads layer 66 and corresponding functions are provided:

Hardware and software layer 60 includes hardware and software components. Examples of hardware components include mainframes, in one example IBM® zSeries® systems; RISC (Reduced Instruction Set Computer) architecture based servers, in one example IBM pSeries® systems; IBM xSeries® systems; IBM BladeCenter® systems; storage devices; networks and networking components. Examples of software components include network application server software, in one example IBM WebSphere® application server software; and database software, in one example IBM DB2® database software. (IBM, zSeries, pSeries, xSeries, BladeCenter, WebSphere, and DB2 are trademarks of International Business Machines Corporation registered in many jurisdictions worldwide).

Virtualization layer 62 provides an abstraction layer from which the following examples of virtual entities may be provided: virtual servers 68; virtual storage 70; virtual networks 72, including virtual private networks; virtual applications and operating systems 74; and virtual clients 76.

In one example, management layer 64 may provide the functions described below. Resource provisioning 80 provides dynamic procurement of computing resources and other resources that are utilized to perform tasks within the cloud computing environment. Metering and Pricing provide cost tracking as resources are utilized within the cloud computing environment, and billing or invoicing for consumption of these resources. In one example, these resources may comprise application software licenses. Security provides identity verification for cloud consumers and tasks, as well as protection for data and other resources. User portal provides access to the cloud computing environment for consumers and system administrators. Service level management 82 provides cloud computing resource allocation and management such that required service levels are met. Service Level Agreement (SLA) 84 planning and fulfillment provide pre-arrangement for, and procurement of, cloud computing resources for which a future requirement is anticipated in accordance with an SLA.

Workloads layer 66 provides examples of functionality for which the cloud computing environment may be utilized. Examples of workloads and functions which may be provided from this layer include: mapping and navigation; software development and lifecycle management; virtual classroom education delivery; data analytics processing; transaction processing; and Mobile Desktop.

FIG. 4 shows an example of determining 100 optimal software system bundles in canned images for pre-imaging virtual machines (VMs) according to a preferred embodiment of the present invention with reference to the system of FIGS. 1-3. Determination 100 begins when resource provisioning 80 receives one or more user requests 102 for resources. Resource provisioning 80 passes 104 the received request(s) to a VM allocation system, e.g., service level management 82 in a typical computer 10 in FIG. 1. The VM allocation system selects 106 an image of a virtual machine that may be empty, partially configured or fully configured with bundled software. The VM allocation system provisions 108 the selected virtual machine to satisfy the user request. Then, the VM allocation system bundles 110 software in the loaded image, removing any unnecessary software elements and installing any necessary software not already installed. The VM allocation system, e.g., service level management 82, monitors the time expended 112 in removal/installation, and determines 114 which bundles to store 116 as canned pre-imaged virtual machines for subsequent use in provisioning VMs.

Typical user requests 102 may include a selection of a central processing unit (CPU), memory and disk space and, further, parameters indicating the VM software stack. Some stored VM images, may contain no software bundle, while others may include a particular operating system and a software stack, i.e., those software elements requested to be loaded on the particular VM, necessary to meet end-user demand, at least when selected 106. If a requested VM image does not contain a bundle, after a virtual machine is provisioned 108, the VM allocation system installs 110 software necessary to satisfy the particular request 102. If a provisioned image is already packed with software, some of which is unnecessary for a virtual machine, the VM allocation system removes whatever is not required.

For each installed/installable software element (i), a number of requests require (ri) that element; and, a number of requests do not require (nri) that element. Also, each element has associated installation time (instTime(i)) costs and removal time (remTime(i)) costs. The VM allocation system assigns an importance value or software utility (SU_(i)=ri*instTime(i)−nri*remTime(i)) indicating the cost savings by, or value of, including the element.

Thus, for any set of images the software utility determines a value for including each particular element by comparing the time to load (or cost of) the element into images that require it against the time that would be required to unload that same element if it were pre-installed in images where it is not required. Thus, most cost savings are realized by including elements with the highest software utility, while the least cost savings (or none) are realized from including elements with a negative software utility, inclusion of which may actually impede instantiation. Accordingly, preferably software with a negative SU, i.e., more time will be spent unloading than loading saves, is excluded from consideration for bundling.

So essentially, the software utility value is a measure of the importance of having the software elements pre-installed into an image. The preferred VM allocation system uses this software utility value to select the requested software elements with the highest software utility value as the set of software elements included in image bundles. Thus, the bundled software speed-ups service, minimizing the time users wait to receive requested virtual machines. Once selected, the VM allocation system bundles 110 software elements, such as operating systems and applications, in the VM image that may be required by one or more requesting end-user.

Optionally, the VM allocation system sorts bundles by total savings or importance as indicated by the software utility value, e.g., in decreasing order of total importance. Then, the VM allocation system selects a number of images with bundled software and stores 116 the selected VM images, e.g., in the cloud provider infrastructure. With subsequent service requests 102, the provider computers load the stored images, instantiating the respective requested virtual machine.

FIG. 5 shows an example of pseudo-code 120 for creating the bundles according to a preferred embodiment of the present invention. Input parameters 122 include a list of server requests (reqList) including the software required for each request; a list of available software elements (softList) with installation time, removal time, and software utility value for each element; the maximum number of bundles (maxBundles); and, a maximum number of software elements in any bundle (maxSoftSys). The final list of images with bundled software (bundleList) 124 is initialized 126 to creating an empty bundle list. The software elements are sorted 128 according to software utility values, e.g. in order of decreasing value. The best provisioning cost (bestCost) is initialized 130 to the value of provisioning the requests without bundles.

After initializing best provisioning costs 130, each bundled 132 is iteratively selected and the software elements requested are bundled constrained by maximum number of software elements, i.e., no bundle includes more software elements than maxSoftSys. By constraining the number of software elements in the bundled images, it is likely that some images will vary only in lower value elements, and therefore, result in identical bundles. It should be noted that other bundle constraints may be applied, substantially as maxSoftSys is applied. Examples of where other constraints may be applied include maximum disk space, overall or for each image, or maximum number of licenses allowed for each image/VM.

The preferred VM allocation system iteratively sets up a bundle for each request 132, adding software elements one at a time 134 with each iteration. This continues until the included elements (bestSoftware) include all requested software for the request, or the number of added elements reaches maxSoftSys.

So first, bestSoftware is emptied 136 or initialized. Also, a temporary cost variable (tempCost) is initialized 138 to the previously determined bestCost. Then, each listed software element is selected 140 in each, and ignoring 142, 144 the selected element for iteration, the selected element is added 146 to the current bundle. The cost of the current bundle is evaluated 148 and the selected element is removed 150. If the cost of the current bundle is less than tempCost 152; then, the preferred VM allocation system sets 154 tempCost to that lower cost and includes 156 the selected element in bestSoftware. If after evaluating all listed software element, bestSoftware is no longer null 158; then, that software is added 160 to the evaluated bundle of that iteration for storage and bestCost is updated 162 with tempCost. Once all bundles have been setup and evaluated, image construction ends 164.

It should be noted that the listed requests may be new requests or a set of past requests. Also, the list may be a batch of requests for new virtual machines. Further, the list of requests may be historic requests made to a legacy provider computer or platform for migrating from that legacy computing platform to another, e.g., new, higher performance platform.

Advantageously, application of the present invention speeds up deployment of software systems, reducing the time required to meet user requirements. Further, a cloud provider can analyze the trade-offs between the number and content of bundled images, and the time to provision virtual machines with the necessary software stack from scratch of from those images. Moreover, the bundled images created and maintained may be constrained as desired, including, for example, for maximum number of software elements in each bundle or disk space used by each bundle.

While the invention has been described in terms of preferred embodiments, those skilled in the art will recognize that the invention can be practiced with modification within the spirit and scope of the appended claims. It is intended that all such variations and modifications fall within the scope of the appended claims. Examples and drawings are, accordingly, to be regarded as illustrative rather than restrictive. 

What is claimed is:
 1. A method of sharing system resources comprising: receiving requests for resources; automatically costing bundling software in virtual machine (VM) images for said received requests; selecting a number of VM images with bundled software, selected said VM images having a higher bundle cost than any unselected said VM images; storing said selected VM images; receiving subsequent requests for resources; and selectively instantiating a VM from one or more stored VM images responsive to each subsequent request.
 2. A method of sharing system resources as in claim 1, wherein automatically costing said VM images comprises: receiving a first request for resources including a requested virtual hardware configuration and a software stack; provisioning a VM responsive to said request; installing software on said provisioned VM responsive to said software stack; uninstalling software from said provisioned VM; determining the cost of including said software in said software stack in a VM image software bundle; and receiving a next request for resources, and returning to provisioning a VM until VMs are provisioned for all requests.
 3. A method of sharing system resources as in claim 2, wherein each software element (i) has a software installation time (instTime(i)) cost and a software removal time (remTime(i)) cost, a number of requests that require (ri) said each software element, a number of requests not requiring (nri) said each software element, and costing installation and uninstallation indicates the advantage of installing said each software element, and each software bundle includes no more than a maximum number of software elements (maxSoftSys) having a highest indicated advantage for said software stack.
 4. A shared resource system resources as in claim 3, wherein costing determines a software utility (SU_(i)) for said each software element, said software utility comparing the cost of installing said each software element in requesting images against the cost of uninstalling said each software element if it were pre-installed in images where it is not required.
 5. A shared resource system resources as in claim 4, wherein said software utility has the form SU_(i)=ri*instTime(i)−nri*remTime(i).
 6. A method of sharing system resources as in claim 4, wherein determining said cost of including said software comprises: sorting said software elements in decreasing order of software utility; selecting a first software bundle; checking said sorted software elements in sort order for a corresponding requirement in the respective software stack until a required software element is identified; adding the identified software element to a respective bundle; checking whether said software utility of said added identified software element increased said bundle cost; and returning to checking said sorted software elements in sort order to identify a next required software element.
 7. A method of sharing system resources as in claim 6, wherein bundling software for said software stack ends when the number of said software elements added to said bundle reaches said maximum number of software elements.
 8. A method of sharing system resources as in claim 6, wherein said software bundles include an operating system identified in a respective request and one or more software elements identified in said software stack, and bundling software for said software stack ends when the last said sorted software element is checked.
 9. A method of sharing system resources as in claim 2, wherein said method shares resources in a cloud environment and said requests are previously received requests, an initial set of said VM images with bundled software being stored responsive to said previously received requests.
 10. A method of sharing cloud environment resources comprising: automatically costing virtual machine (VM) images for a collection of previously received requests for cloud resources; selecting a number of VM images with bundled software, selected said VM images having a higher bundle cost than any unselected said VM images; storing said selected VM images as an initial set of said VM images; receiving subsequent requests for resources; selectively instantiating a VM from one or more stored VM images responsive to each of said subsequent requests.
 11. A method of sharing cloud environment resources as in claim 10, said method further comprising: receiving a request for resources; automatically costing another VM image for said received request; selectively including said other VM image with bundled software whenever said other VM image has a higher bundle cost than any of said VM images; and storing said other VM image with said initial set of VM images.
 12. A method of sharing cloud environment resources as in claim 11, wherein automatically costing said VM images comprises: receiving a first request for resources including a requested virtual hardware configuration, an operating system and a software stack; provisioning a VM responsive to said request; installing software on said provisioned VM responsive to said software stack; uninstalling software from said provisioned VM; costing said installation and uninstallation of said software; receiving a next request for resources; and until VMs are provisioned for all requests, returning to provisioning a VM.
 13. A method of sharing cloud environment resources as in claim 12, wherein each software element (i) has a software installation time (instTime(i)) cost and a software removal time (remTime(i)) cost, a number of requests that require (ri) said each software element, a number of requests not requiring (nri) said each software element, and costing installation and uninstallation indicates the advantage of installing said each software element, and each software bundle includes no more than a maximum number of software elements (maxSoftSys) having a highest indicated advantage for said software stack.
 14. A method of sharing e cloud environment resources as in claim 13, wherein costing determines a software utility (SU_(i)) for said each software element, said software utility comparing the cost of installing said each software element in requesting images against the cost of uninstalling said each software element if it were pre-installed in images where it is not required, and said software utility has the form SU_(i)=ri*instTime(i)−nri*remTime(i).
 15. A method of sharing cloud environment resources as in claim 13, wherein determining each said bundle cost comprises: sorting said software elements in decreasing order of software utility; selecting a first software bundle; checking said sorted software elements in sort order for a corresponding requirement in the respective software stack until a required software element is identified; adding the identified software element to a respective bundle; checking whether said software utility of said added identified software element increased said bundle cost; and returning to checking said sorted software elements in sort order to identify a next required software element.
 16. A method of sharing cloud environment resources as in claim 15, wherein bundling software for said software stack ends when the number of said software elements added to said bundle reaches said maximum number of software elements; and whenever said maximum number of software elements is not reached continuing bundling software for said software stack until the last said sorted software element is checked.
 17. A computer program product for allocating shared system resources, said computer program product comprising a non-transitory computer usable medium having computer readable program code stored thereon, said computer readable program code causing one or more computer executing said code to: receive requests for resources; automatically cost bundling software virtual in machine (VM) images for said received requests; select a number of VM images with bundled software, selected said VM images having a higher bundle cost than any unselected said VM images; store said selected VM images; receive subsequent requests for resources; and selectively instantiate a VM from one or more stored VM images responsive to each subsequent requests.
 18. A computer program product for allocating shared system resources as in claim 17, wherein automatically costing said VM images causes one or more computer executing said code to: receive a first request for resources including a requested virtual hardware configuration and a software stack; provision a VM responsive to said request; install software on said provisioned VM responsive to said software stack; uninstall software from said provisioned VM; determine the cost of including said software in said software stack in a VM image software bundle; and receive a next request for resources, and returning to provisioning a VM until VMs are provisioned for all requests.
 19. A computer program product for allocating shared system resources as in claim 18, wherein each software element (i) has a software image installation time (instTime(i)) cost and a software removal time (remTime(i)) cost, a number of requests requiring (ri) said each software element, a number of requests not requiring (nri) said each software element, and costing installation and uninstallation indicates the advantage of installing said each software element, and each software bundle includes less than a maximum number of software elements (maxSoftSys) having a highest indicated advantage for said software stack.
 20. A computer program product for allocating shared system resources as in claim 19, wherein costing determines a software utility (SU_(i)) for said each software element, said software utility comparing the cost of installing said each software element in requesting images against the cost of uninstalling said each software element if it were pre-installed in images where it is not required, wherein said software utility has the form SU_(i)=ri*instTime(i)−nri*remTime(i).
 21. A computer program product for allocating shared system resources as in claim 19, wherein said method shares resources in a cloud environment and said requests include previously received requests, and determining said cost of including said software causes one or more computer executing said code to: sort said software elements in decreasing order of software utility; select a first software bundle; check said sorted software elements in sort order for a corresponding requirement in the respective software stack until a required software element is identified; add the identified software element in a respective bundle; check whether said software utility of said added identified software element increased said bundle cost; and return to checking sorted said software elements in sort order to identify a next required software element.
 22. A computer program product for allocating cloud resources as in claim 21, wherein said software further causes one or more computer executing said code to: store an initial set of said VM images with bundled software responsive to said previously received request; end bundling software for said software stack when the number of said software elements added to said bundle reaches said maximum number of software elements; and whenever said maximum number of software elements is not reached continue bundling software for said software stack until the last said sorted software element is checked.
 23. A computer program product for allocating shared system resources, said computer program product comprising a non-transitory computer usable medium having computer readable program code stored thereon, said computer readable program code causing one or more computer executing said code to: automatically cost virtual machine (VM) images for a collection of previously received requests for cloud resources, each request including a requested virtual hardware configuration, an operating system and a software stack, said software stack indicating required software elements for said each request, each software element (i) having a software installation time (instTime(i)) cost and a software removal time (remTime(i)) cost, a number of requests requiring (ri) said each software element, a number of requests not requiring (nri) said each software element; select a number of VM images with bundled software, selected said VM images having a higher bundle cost than any unselected said VM images; store said selected VM images; receive subsequent requests for resources; selectively instantiate a VM from one or more stored VM images responsive to each of said subsequent requests.
 24. A computer program product for allocating cloud resources as in claim 23, further causing one or more computer executing said code to: receive requests for resources; automatically cost another VM image for each subsequent request, wherein automatically costing said VM images and said other VM images causes said one or more computer executing said code to: receive a first request for resources from said collection of previously received requests, provision a VM responsive to said request, install software on said provisioned VM responsive to said software stack, uninstall software from said provisioned VM, determine a software utility (SU_(i)) for said each software element, sort said software elements in decreasing order of said software utility, check sorted said software elements in sort order for a corresponding requirement in the respective software stack until a required software element is identified, add the identified software element in a respective bundle; determine whether said software utility of said added identified software element increased said bundle cost, determine whether checking is complete, and until checking is complete, returning to checking said sorted software elements in sort order to identify a next required software element, checking being complete whenever the bundle reaches a maximum number of software elements (maxSoftSys), or the last sorted software element is checked, and once checking is complete determine whether VMs are provisioned for all requests, and until VMs are provisioned for all requests, returning to receive a next request for resources; selectively include each said other VM image with bundled software whenever said other VM image has a higher bundle cost than any stored VM image, each software bundle including less than, and having a highest indicated advantage for, said software stack; and store said other VM image with said initial set of VM images.
 25. A computer program product for allocating cloud resources as in claim 24, said software utility comparing the cost of installing said each software element in requesting images against the cost of uninstalling said each software element if it were pre-installed in images where it is not required, and said software utility has the form SU_(i)=ri*instTime(i)−nri*remTime(i). 